// 语音合成服务
import { ref } from 'vue'
import { userState, VIP_LEVELS, checkUsagePermission, recordUsage } from './user'
import config from '@/config'
import request from '@/utils/request'

// 语音类型列表
export const voiceTypes = [
  {
    id: 'zh-CN-XiaoxiaoNeural',
    name: '晓晓-女声',
    tag: '自然',
    description: '新闻、广告、影视解说',
    category: '热门',
    needVip: false,
    engine: 'edge-tts'
  },
  {
    id: 'zh-CN-YunxiNeural',
    name: '云希-男声',
    tag: '自然',
    description: '新闻、客服、影视解说',
    category: '上新',
    needVip: true,
    engine: 'edge-tts'
  },
  {
    id: 'zh-CN-XiaoyiNeural',
    name: '晓伊-女声',
    tag: '自然',
    description: '阅读听书',
    category: '女声',
    needVip: true,
    engine: 'edge-tts'
  },
  {
    id: 'zh-CN-YunyangNeural',
    name: '云扬-男声',
    tag: '自然',
    description: '情感节目、解说',
    category: '特色',
    needVip: true,
    engine: 'azure'
  },{
    id: 'zf_002',
    name: 'kokoro',
    tag: '自然',
    description: '情感节目、解说',
    category: '特色',
    needVip: true,
    engine: 'kokoro'
  },
  // {
  //   id: 'zh-CN-XiaochenNeural',
  //   name: '晓辰-女声',
  //   tag: '自然',
  //   description: '新闻、纪录片',
  //   category: '特色',
  //   needVip: true
  // }
]

// 语速选项
export const speedOptions = [
  { value: -100, label: '最慢' },
  { value: -50, label: '较慢' },
  { value: +0, label: '正常语速' },
  { value: '+50', label: '较快' },
  { value: '+100', label: '最快' }
]

// 音量选项
export const volumeOptions = [
  { value: -50, label: '较低' },
  { value: -25, label: '稍低' },
  { value: +0, label: '正常音量' },
  { value: +25, label: '稍高' },
  { value: +50, label: '较高' }
]

// 情感风格选项
export const styleOptions = [
  { value: 'cheerful', label: '欢快' },
  { value: 'sad', label: '悲伤' },
  { value: 'angry', label: '愤怒' },
  { value: 'fearful', label: '害怕' },
  { value: 'disgruntled', label: '不满' },
  { value: 'serious', label: '严肃' },
  { value: 'gentle', label: '温柔' }
]

// 情感强度选项
export const emotionOptions = [
  { value: 0.5, label: '较弱情感' },
  { value: 1.0, label: '正常情感' },
  { value: 1.5, label: '较强情感' },
  { value: 2.0, label: '强烈情感' }
]

// TTS 配置
const defaultConfig = {
  voiceType: 'zh-CN-XiaoxiaoNeural',
  speed: '+0',
  volume: '+0',
  style: 'gentle',
  styleDegree: 1.0
}

// TTS 状态
export const ttsState = ref({
  isConverting: false,
  progress: 0,
  audioUrl: '',
  error: null,
  currentTask: null,
  isPlaying: false
})

// 检查音色权限
function checkVoicePermission(voiceType) {
  const voice = voiceTypes.find(v => v.id === voiceType)
  if (!voice) {
    throw new Error('无效的音色类型')
  }

  const vipConfig = VIP_LEVELS[userState.value.vipLevel]
  if (voice.needVip && vipConfig.voiceTypes !== 'all' && !vipConfig.voiceTypes.includes(voiceType)) {
    throw new Error('该音色需要升级会员')
  }

  return true
}

// 计算文本时长
function calculateDuration(text) {
  // 简单估算：假设每个字0.3秒
  return text.length * 0.3
}

// 播放音频
export function playAudio(url) {
  try {
    // 创建音频上下文
    const audioContext = uni.createInnerAudioContext()
    audioContext.src = url
    audioContext.autoplay = true
    
    // 监听播放状态
    audioContext.onPlay(() => {
      ttsState.value.isPlaying = true
    })
    
    audioContext.onEnded(() => {
      ttsState.value.isPlaying = false
      audioContext.destroy()
    })
    
    audioContext.onError((err) => {
      console.error('音频播放错误:', err)
      ttsState.value.isPlaying = false
      audioContext.destroy()
    })
    
    return audioContext
  } catch (error) {
    console.error('创建音频上下文失败:', error)
    throw error
  }
}

// 停止播放
export function stopAudio(audioContext) {
  if (audioContext) {
    audioContext.stop()
    audioContext.destroy()
    ttsState.value.isPlaying = false
  }
}

// 获取声音列表
export function getVoiceList() {
	return new Promise((resolve, reject) => {
		uni.request({
			url: config.apiBaseUrl + '/api/audio/kokoro/voices',
			method: 'GET',
			success: (res) => {
				if (res.data.code === 200) {
					resolve(res.data.data)
				} else {
					reject(new Error(res.data.message || '获取声音列表失败'))
				}
			},
			fail: (err) => {
				reject(err)
			}
		})
	})
}
export function synthesizeWithKokoroApi(data = {}) {
	return request.post('audio/kokoro/synthesize', data)
}
// 语音合成
export async function synthesizeSpeech(text, options = {}) {

  return request.post('audio/create', {
    text: text,
    voice: options.voiceType || defaultConfig.voiceType,
    rate: `${options.speed || defaultConfig.speed}%`,
    volume: `${options.volume || defaultConfig.volume}%`,
    style: options.style || defaultConfig.style,
    style_degree: options.styleDegree || defaultConfig.styleDegree
  })
	// try {
	// 	// 更新状态为转换中
	// 	ttsState.value.isConverting = true
	// 	ttsState.value.progress = 0
		
	// 	// 模拟进度更新
	// 	const progressInterval = setInterval(() => {
	// 		if (ttsState.value.progress < 90) {
	// 			ttsState.value.progress += 10
	// 		}
	// 	}, 500)
  //   const token = uni.getStorageSync('token')
	// 	if (!token) {
	// 		throw new Error('未登录')
	// 	}
		
	// 	// 调用接口
	// 	const response = await uni.request({
	// 		url: `${config.apiBaseUrl}/api/audio/create`,
	// 		method: 'POST',
	// 		data: {
	// 			text: text,
	// 			voice: options.voiceType || defaultConfig.voiceType,
	// 			rate: `${options.speed || defaultConfig.speed}%`,
	// 			volume: `${options.volume || defaultConfig.volume}%`,
	// 			style: options.style || defaultConfig.style,
	// 			style_degree: options.styleDegree || defaultConfig.styleDegree
	// 		},
	// 		header: {
	// 			'Content-Type': 'application/json',
	// 			'Authorization': token
	// 		}
	// 	})
		
	// 	// 清除进度更新定时器
	// 	clearInterval(progressInterval)
		
	// 	// 检查响应状态
	// 	// if (response.statusCode !== 200) {
	// 	// 	// throw new Error('合成失败，请重试')
  //   //   uni.showToast({
  //   //     title: response.message || '合成失败，请重试',
  //   //     icon: 'none'
  //   //   })
    
	// 	// }
		
	// 	// 更新状态
	// 	ttsState.value.progress = 100
	// 	ttsState.value.isConverting = false
	// 	ttsState.value.audioUrl = response.data.url
		
	// 	return response.data
	// } catch (error) {
	// 	// 发生错误时重置状态
	// 	ttsState.value.isConverting = false
	// 	ttsState.value.progress = 0
	// 	throw error
	// }
}

// 取消当前任务
export function cancelCurrentTask() {
  if (ttsState.value.currentTask) {
    ttsState.value.currentTask = null
    ttsState.value.isConverting = false
    ttsState.value.progress = 0
  }
}

// 导出音频
export async function exportAudio(audioUrl, filename) {
  try {
    // 检查会员权限
    if (userState.value.vipLevel === 'FREE') {
      throw new Error('导出功能需要开通会员')
    }

    const link = document.createElement('a')
    link.href = audioUrl
    link.download = filename
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
  } catch (error) {
    console.error('导出音频失败:', error)
    throw error
  }
}


// 检查文本合规性
export function checkTextSensitivity(text) {
  // TODO: 实现敏感词检查
  return {
    hasSensitive: false,
    words: []
  }
}

// 优化停顿
export function optimizePause(text) {
  // TODO: 实现停顿优化
  return text.replace(/([，。！？])/g, '$1 ')
}

// 修正发音
export function correctPronunciation(text) {
  // TODO: 实现发音纠正
  return text
} 